package com.richpay.basejava.base21.part1;

/**
 * 在Java中创建多线程的方式有两种：
 * A:继承Thread类并重写Thread类中的run()方法
 * 1.编写一个子类MyThread继承 Thread并重写Thread类的run()方法
 * public class MyThread extends Thread{
 * 子线程代码的执行区域
 * public void run(){
 * 运行在子线程中的代码
 * }
 * }
 * 2.实例化线程的子类对象MyThread
 * MyThread mt=new MyThread();
 * 3.调用子类对象MyThread的start()开启子线程执行子线程中run()方法中的代码
 * mt.start();
 * B:实现Runnable接口
 * 1.编写一个子类实现Runnable接口并重写Runnable接口中唯一的方法run()方法
 * public class MyRunnable implements Runnable{
 * 子线程代码的执行区域
 * public void run(){
 * 运行在子线程中的代码
 * }
 * }
 * 2.实例化实现Runnable接口的子类对象MyRunnable
 * MyRunnable mr=new MyRunnable();
 * 3.实例化Thread对象并传递实现Runnable接口的子类对象mr
 * Thread t=new Thread(mr);
 * 4.开启子线程
 * t.start();
 * 多线程的执行具有不确定性，这是由于CPU的切换造成的.
 */
public class ThreadDemo {


    public static void main(String[] args) {

        //1.实例化实现Runnable接口的子类对象
        MyRunnable myRunnable = new MyRunnable();
        //2.实例化线程对象并将实现Runnable接口的子类对象作为构造函数的形参传递给线程对象
        Thread t1 = new Thread(myRunnable);
        t1.setName("子线程一号");
        //3.开启子线程
        t1.start();


        for (int i = 0; i < 10; i++) {
            String name = Thread.currentThread().getName();
            System.out.println(name + "====>" + i);
        }

    }


    /**
     * 编写一个类实现Runnable接口
     */
    static class MyRunnable implements Runnable {
        /**
         * 子线程代码的执行区域
         */
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                //获取正在执行指令的线程的对象
                String name = Thread.currentThread().getName();
                System.out.println(name + "====>" + i);
            }
        }

    }
}
